package com.javabloger.orm;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

public interface IObjectDaos {
	
	 /**
	  * @param conn  设置数据库连接池属性  
	  * <p>
	  */
	public void setDataSource(DataSource dataSource); 
	 
	 /**
	  * @param conn 获得数据库连接池属性  
	  * <p>
	  */
	public DataSource getDataSource() ;
	
	
	 /**
	  * @param conn 设置数据库连接属性  
	  * <p>
	  */
	public void setConnection(Connection connection) ;
	
	
	 /**
	  * @param conn 获得数据库连接属性  
	  * <p>
	  */
//	public Connection getConnection() ;
	
	
	 /**
	  * @param objTable 对象表名称
	  * <p>
	  * @param PrimaryKey 字段名称(主键)
	  * <p>
	  *  @param PrimaryKey 字段值(主键)
	  * <p>
	  */
	  public  void  deleteByPrimaryKey  (Class<?> objTable, Object   PrimaryKey ,Object PrimaryValue) throws  Exception;
	
	 /**
	  * @param objTable 对象表名称
	  * <p>
	  * @param PrimaryKey 字段名称(主键)
	  * <p>
	  *  @param PrimaryKey 多个字段值(主键)
	  * <p>
	  */
	 public  void  deleteObjectsByPrimaryKeys ( Class<?> objTable, Object  PrimaryKey,Object [] PrimaryValues ) throws  Exception;
	
	
	/**
	 *  插入记录方法
	 * <p>
	 * @param objTable  实例化 (new)  pojo 对象
	 */
	public void addObject( Object objTable  ) throws  Exception;
	
	/**
	 * @param Object []    批量插入的对象数组
	 *  <p>
	 */
	public  void  addBatchObjects (Object []  objTables ) throws  Exception;
	
	/** <b>程序描述:</b><p> 
	 * 	 放入SQL查询语句 返回一条记录，返回类型是Map.<p>
	 *   <b>程序运行示例:</b><br> 
	 *   JDBCUtils  uu= new JDBCTemplateUtils();<br>
	 *   <b>Map<?, ?> map= uu.queryMap(  "select count(id) as count from crm_users" ) ;</b><br>
	 *    System.out.println (map.get("count") );
	 * <hr>
	 * @param String  执行的SQL语句
	 *  <br>
	 * @param objTable  实例化 (new)  pojo 对象
	 */
	public Map<?, ?>  queryMap ( String SQL ) throws  Exception ;
	
	/**
	 * <p>
	 * @param String  执行的SQL语句
	 * <p>
	 * @param objTable  实例化 (new)  pojo 对象
	 * <p>
	 * @param param  查询条件
	 */
	public Map<?, ?>  queryMapByCondition (  String SQL,  Object [] param ) throws  Exception;
	
	/**
	 * <p>
	 * @param String  执行的SQL语句
	 * <p>
	 * @param objTable  实例化 (new)  pojo 对象
	 * <p>
	 * @param param  查询条件
	 */
	public List<?> queryListByCondition (  String SQL, Class<?> objTable,Object [] param ) throws  Exception;
	
	/**
	 * <p>
	 * @param String  执行的SQL语句
	 * <p>
	 * @param objTable  实例化 (new)  pojo 对象
	 */
	public List<?> queryList (  String SQL, Class<?> objTable ) throws  Exception;
	
	
	/**
	 * <p>
	 * @param String  执行的SQL语句
	 * <p>
	 * @param objTable  实例化 (new)  pojo 对象
	 */
	public Object  queryOneObject (  String SQL, Class<?> objTable ) throws  Exception;
	
	
	/**
	 * @param String  执行的SQL语句
	 * <p>
	 * @param objTable  实例化 (new)  pojo 对象
	 * <p>
	 * @param param  查询参数
	 */
	public Object  queryOneObjectByCondition (  String SQL, Class<?> objTable, Object [] param )
				throws  Exception;
	
	/**
	 * @param String  执行的SQL语句
	 */
	public void updateObjectBySQL( String SQL  ) throws SQLException;
	
	/**
	 * @param objTable  实例化 (new)  pojo 对象
	 * <p>
	 * @param KeyColumn  更新条件字段名称
	 * <p>
	 * @param KeyValue	  更新条件字段值
	 */
	public void updateObjectByPrimaryKey( Object objTable,String KeyColumn,Object KeyValue  ) throws  Exception ;
	
	/**
	 * 结束事务
	 * @param conn
	 * @throws Exception 
	 */
	public void endTransaction(  ) throws Exception ;
	
	/**
	 * 开启事务
	 * @param conn
	 */
	public void startTransaction() throws Exception ;

}
